package com.csy.feign;

import feign.Response;
import feign.codec.ErrorDecoder;
import lombok.extern.slf4j.Slf4j;

/**
 * 将异常封装成项目中特定的异常(可选)
 * @author 吴樑
 * @date 2021年12月28日
 * @version 1.0
 */
@Slf4j
public class FeignErrorEncoder implements ErrorDecoder {
	/** 400+ 错误的提示 */
	private final String error4Info = "错误访问, 请确认访问路径或格式是否正确";
	/** 500+ 错误的提示 */
	private final String error5Info = "服务器繁忙, 请稍后尝试或联系管理员";
	
	@Override
	public Exception decode(String methodKey, Response response) {
		log.info("> [FeignErrorEncoder]methodKey: {}", methodKey);
		
		if (400 <= response.status() || response.status() < 500) {
			log.error("> [FeignErrorEncoder]发生400以上的错误: {}", methodKey);
			throw new IllegalArgumentException(error4Info);
		} else if (500 <= response.status()) {
			log.error("> [FeignErrorEncoder]发生500以上的错误: {}", methodKey);
			throw new IllegalArgumentException(error5Info);
		}
		return new ErrorDecoder.Default().decode(methodKey, response);
	}

}
